function convertMilliseconds(ms) {
  // 确保输入是数字
  if (typeof ms !== "number" || isNaN(ms)) {
    throw new Error("输入必须是有效的数字");
  }

  // 处理负数
  const isNegative = ms < 0;
  ms = Math.abs(ms);

  // 计算各个时间单位
  const hours = Math.floor(ms / (1000 * 60 * 60));
  ms = ms % (1000 * 60 * 60);

  const minutes = Math.floor(ms / (1000 * 60));
  ms = ms % (1000 * 60);

  const seconds = Math.floor(ms / 1000);
  const milliseconds = ms % 1000;

  // 返回结果对象
  return {
    hours: isNegative ? -hours : hours,
    minutes: isNegative ? -minutes : minutes,
    seconds: isNegative ? -seconds : seconds,
    milliseconds: isNegative ? -milliseconds : milliseconds,
    toString(digit = false) {
      // 格式化小时（至少2位，超过99则按实际位数显示）
      const formattedHours = hours.toString().padStart(hours > 99 ? 0 : 2, "0");
      // 固定2位分钟和秒，3位毫秒
      const formattedMinutes = Math.abs(minutes).toString().padStart(2, "0");
      const formattedSeconds = Math.abs(seconds).toString().padStart(2, "0");
      const formattedMs = Math.abs(milliseconds).toString().padStart(3, "0");

      if (digit)
        return `${
          isNegative ? "-" : ""
        }${formattedHours} : ${formattedMinutes} : ${formattedSeconds} . ${formattedMs}`;
      return `${
        isNegative ? "-" : ""
      }${formattedHours}小时 ${formattedMinutes}分钟 ${formattedSeconds}秒 ${formattedMs}毫秒`;
    },
  };
}

export default convertMilliseconds;
